package app;

import java.awt.*;
import javax.swing.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

public class Notice {

	  public static void main(String[] args) {
	        SwingUtilities.invokeLater(Notice::creatGUI);
	    }
	 
	    public static void creatGUI() {
	        //创建可视化窗口
	        JFrame f = new JFrame("记事本程序");
	        //设定显示位置,左上角为（0，0），根据笔记本电脑的显示分辨率设置成在正中间显示
	        f.setLocation(480, 270);//这是显示窗口的左上角坐标
	        //设定窗口大小为屏幕1/2倍（电脑显示分辨率）
	        f.setSize(960, 540);//我电脑显示分辨率为1920*1080
	        //创建文本域用来打字显示出来的
	        JTextArea WBY = new JTextArea("Hello");//这里可以输入东西到时候打开窗体自动显示出来
	        WBY.setFont(new Font("", Font.BOLD, 25));
	        //设置文本域为自动换行
	        WBY.setLineWrap(true);
	        //将文本域添加到含有下拉框的面板中
	        JScrollPane MB = new JScrollPane(WBY);
	        //将含有下拉框的面板放入内容面板中
	        f.add(MB);
	        //创建一个菜单栏
	        JMenuBar cdl = new JMenuBar();
	        //创建菜单栏上的5个菜单并且设置字体和大小
	        JMenu m1 = new JMenu("文件");
	        JMenu m2 = new JMenu("编辑");
	        JMenu m3 = new JMenu("字体大小");
	        JMenu m4 = new JMenu("字体颜色");
	        JMenu m5 = new JMenu("帮助文档");
	        m1.setFont(new Font("", Font.BOLD, 25));
	        m2.setFont(new Font("", Font.BOLD, 25));
	        m3.setFont(new Font("", Font.BOLD, 25));
	        m4.setFont(new Font("", Font.BOLD, 25));
	        m5.setFont(new Font("", Font.BOLD, 25));
	        //在菜单的基础上创建下拉可选菜单项按钮
	        JMenuItem x1 = new JMenuItem("新建");
	        JMenuItem x2 = new JMenuItem("保存");
	        JMenuItem x3 = new JMenuItem("打开");
	        JMenuItem x4 = new JMenuItem("退出");
	        JMenuItem x5 = new JMenuItem("复制");
	        JMenuItem x6 = new JMenuItem("粘贴");
	        JMenuItem x7 = new JMenuItem("裁剪");
	        JMenuItem x8 = new JMenuItem("删除");
	        JMenuItem x9 = new JMenuItem("大");
	        JMenuItem x10 = new JMenuItem("中");
	        JMenuItem x11 = new JMenuItem("小");
	        JMenuItem x12 = new JMenuItem("红色");
	        JMenuItem x13 = new JMenuItem("绿色");
	        JMenuItem x14 = new JMenuItem("蓝色");
	        JMenuItem x15 = new JMenuItem("黑色");
	        JMenuItem x16 = new JMenuItem("百度");
	        //为下拉可选菜单项设置字体和大小
	        x1.setFont(new Font("s", Font.BOLD, 20));
	        x2.setFont(new Font("s", Font.BOLD, 20));
	        x3.setFont(new Font("s", Font.BOLD, 20));
	        x4.setFont(new Font("s", Font.BOLD, 20));
	        x5.setFont(new Font("s", Font.BOLD, 20));
	        x6.setFont(new Font("s", Font.BOLD, 20));
	        x7.setFont(new Font("s", Font.BOLD, 20));
	        x8.setFont(new Font("s", Font.BOLD, 20));
	        x9.setFont(new Font("s", Font.BOLD, 40));
	        x10.setFont(new Font("s", Font.BOLD, 30));
	        x11.setFont(new Font("s", Font.BOLD, 20));
	        x12.setFont(new Font("s", Font.BOLD, 20));
	        x13.setFont(new Font("s", Font.BOLD, 20));
	        x14.setFont(new Font("s", Font.BOLD, 20));
	        x15.setFont(new Font("s", Font.BOLD, 20));
	        x16.setFont(new Font("s", Font.BOLD, 20));
	        //给颜色下拉菜单项分别设置相应的背景色，这样展现就会直观一点了
	        x12.setBackground(Color.RED);
	        x13.setBackground(Color.GREEN);
	        x14.setBackground(Color.BLUE);
	        x15.setBackground(Color.BLACK);
	        //实现新建记事本按钮的功能
	        x1.addActionListener(e -> {
	            creatGUI();
	        });//再次调用该方法创建另外一个记事本
	        //实现保存记事本按钮的功能
	        x2.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e2) {
	                //创建一个窗体并且设置窗体标题和保存功能
	                FileDialog fileDialog = new FileDialog(f, "保存文件至", FileDialog.SAVE);
	                //保存文件的对话框设置为可见
	                fileDialog.setVisible(true);
	                //获取保存的路径和设置的文件名
	                String absPath = fileDialog.getDirectory() + fileDialog.getFile();
	                try {//用来检测是否设置了保存路径
	                    //设置输出文件名为保存的路径下面的文件名
	                    BufferedWriter wr = new BufferedWriter(new FileWriter(absPath));
	                    //获取文本域字符串
	                    String s = WBY.getText();
	                    //开始写入
	                    wr.write(s);
	                    //写完关闭
	                    wr.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        });
	        //实现打开记事本按钮的功能
	        x3.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e2) {
	                //创建一个窗体并且设置窗体标题和打开功能
	                FileDialog fileDialog = new FileDialog(f, "打开文件", FileDialog.LOAD);
	                //打开文件的对话框设置为可见
	                fileDialog.setVisible(true);
	                //获取打开的路径和设置的文件名
	                String absPath = fileDialog.getDirectory() + fileDialog.getFile();
	                try {//用来检测是否设置了打开路径
	                    //设置读入文件名为打开的路径下面的文件名
	                    BufferedReader re = new BufferedReader(new FileReader(absPath));
	                    String line;
	                    while ((line = re.readLine()) != null)
	                        //只要文件中不为空就不断追加到文本框中
	                        WBY.append(line + '\n');
	                    //读取完毕结束
	                    re.close();
	                } catch (Exception e) {
	                    e.printStackTrace();
	                }
	            }
	        });
	        //实现退出记事本按钮的功能
	        x4.addActionListener(e -> System.exit(0));
	        //调用文件工具箱下的系统剪贴板方法
	        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	        //实现复制文本按钮的功能
	        x5.addActionListener(e -> {
	            //将选中的文本内容存入text中
	            String text = WBY.getSelectedText();
	            //传送到字符串里面存着
	            StringSelection selection = new StringSelection(text);
	            //将得到的内容放入到剪切板中
	            clipboard.setContents(selection, null);
	        });
	        //实现粘贴文本按钮的功能
	        x6.addActionListener(e -> {
	            //获取系统剪贴板中的内容
	            Transferable text = clipboard.getContents(null);
	            //判断剪贴板中的内容是否支持文本
	            if (text.isDataFlavorSupported(DataFlavor.stringFlavor)) {
	                try {
	                    //强制转换剪贴板中的内容
	                    String text1 = (String) text.getTransferData(DataFlavor.stringFlavor);
	                    //获取当前光标的位置
	                    int n=WBY.getCaretPosition();
	                    //插入复制的内容到文本框的光标后面
	                    WBY.insert(text1,n);
	                } catch (Exception e2) {
	                    e2.printStackTrace();
	                }
	            }
	        });
	        //实现裁剪文本按钮的功能
	        x7.addActionListener(e -> {
	            //将得到的选择文本内容存入text中
	            String text = WBY.getSelectedText();
	            //传送到字符串里面存着
	            StringSelection selection = new StringSelection(text);
	            //将得到的内容放到剪切板中
	            clipboard.setContents(selection, null);
	            //将选中文本start到end之间的内容替换为空白""
	            WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
	        });
	        //实现删除文本按钮的功能
	        x8.addActionListener(e -> {
	            //将选中文本start到end之间的内容替换为空白
	            WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
	        });
	        //实现字体变大的功能
	        x9.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 40));
	        });
	        //实现字体变中等大小的功能
	        x10.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 30));
	        });
	        //实现字体变小的功能
	        x11.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 20));
	        });
	        //实现字体颜色变红的功能
	        x12.addActionListener(e -> {
	            WBY.setForeground(Color.RED);
	        });
	        //实现字体颜色变绿的功能
	        x13.addActionListener(e -> {
	            WBY.setForeground(Color.GREEN);
	        });
	        //实现字体颜色变蓝的功能
	        x14.addActionListener(e -> {
	            WBY.setForeground(Color.BLUE);
	        });
	        //实现字体颜色变黑的功能
	        x15.addActionListener(e -> {
	            WBY.setForeground(Color.BLACK);
	        });
	        //实现打开帮助文档的功能
	        x16.addActionListener(e -> {
	            //创建消息提示框,包括显示内容和弹窗标题
	            JOptionPane.showMessageDialog(f,
	                    "百度！", "提示", JOptionPane.INFORMATION_MESSAGE);
	        });
	        //分别给5个菜单添加各自的下拉菜单项
	        m1.add(x1);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x2);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x3);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x4);
	        m2.add(x5);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x6);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x7);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x8);
	        m3.add(x9);
	        m3.addSeparator();//两个菜单项之间添加界线
	        m3.add(x10);
	        m3.addSeparator();//两个菜单项之间添加界线
	        m3.add(x11);
	        m4.add(x12);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x13);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x14);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x15);
	        m5.add(x16);
	        //添加这5个菜单到菜单栏
	        cdl.add(m1);
	        cdl.add(m2);
	        cdl.add(m3);
	        cdl.add(m4);
	        cdl.add(m5);
	        //给窗体添加完善好的菜单栏
	        f.setJMenuBar(cdl);
	        //记事本设置为可见
	        f.setVisible(true);
	        //点击×号结束应用程序
	        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    }
}
